10
תגובות

תגי Meta ל Layouts ב Yii

פתח Kzrh ,
היי.
אני משתמש ב Yii עם layout.
אני רוצה להעביר ל Layout תגי Meta שאני קובע דרך הקוד/קונטרולר.
הנה דוגמה לקונטרולר:
<?php
class MainController extends CController {
  public $layout = 'all';

  public function actionIndex() {
    $this->pageTitle = 'PSN Trophies - Home Page';
   
    $this->render('index');
  }
}
?>

כפי שאתם רואים, אני משתמש ב layout בשם 'all'.
הנה ה Layout:
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title><?= $this->pageTitle; ?></title>
  </head>
  <body>
    <?= $content; ?>
  </body>
</html>

עכשיו, אני רוצה להשתמש במשהו כמו registerMetaTag, או אפילו סתם להעביר משתנים כמו ב render.
איך אני עושה את זה ב Layout?
תודה.
דרך אגב, אם יש דרך יותר טובה לעשות שלכל דף יהיה תגי מטה משלו (keywords, description) אז תגידו לי בבקשה..

10 תשובות

avatar ענה intval ב 31 לאוגוסט 2012 #

רמז
חוץ מזה, אתה תמיד יכול לפתוח את קוד המקור של האתר הזה ולראות איך עשו משהו כאן

avatar ענה Kzrh ב 31 לאוגוסט 2012 #

תודה רבה. אני באמת אתחיל להסתכל קצת יותר על ה Github של האתר :) שמתי לב שגם האתר הזה בנוי ב Yii.
ניסיתי, ואני מקבל שגיאה. עשיתי ככה:
HomepageController:

<?php
class HomepageController extends CController {
  public $layout = 'all';

  public function actionIndex() {
    $this->pageTitle = 'PSN Trophies - Home Page';
    $this->description = 'PlayStation Network Profile Trophies Home Page';
    $this->keywords = 'psn,playstation,netwrok,profile,trophy,card,trophies,sig,signature,forum,website,homepage,home,page';
   
    $this->render('index');
  }
}
?>

ה Layout:
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="description" content="<?= $this->description; ?>" />
    <meta name="keywords" content="<?= $this->keywords; ?>" />
    <title><?= $this->pageTitle; ?></title>
  </head>
  <body>
    <h1>PSN Trophies</h1>
    <hr />
    <?= CHtml::link('Register', 'index.php?r=user/register'); ?> |
    <?= CHtml::link('Login', 'index.pph?r=user/login'); ?>
    <hr />
    <?= $content; ?>
  </body>
</html>

השגיאה:
Property "HomepageController.description" is not defined.

avatar ענה intval ב 31 לאוגוסט 2012 #

כמובן, לא הגדרת בשום מקום את קיומו של המאפיין description במחלקת HomepageController

avatar ענה shlomo120 ב 02 לספטמבר 2012 #

תכתוב מתחת לlayout

public $description;

וכן גם למילות מפתח ... :)

avatar ענה intval ב 02 לספטמבר 2012 #

עדיף ישר ב CController, במקום לכתוב את זה בכל קובץ מחדש ולקבל שגיאות במקומות שהם לא כתבת

avatar ענה shlomo120 ב 02 לספטמבר 2012 #

חידשת לי :) ובדוגרי אתה דיי צודק :)

avatar ענה KingYes ב 02 לספטמבר 2012 #

סתם משהו שלא מסתדר לי, למה המשתנה הזה צריך להיות public? לא מספיק לו protected?

כאילו תאכלס, כל הפעולות של הקונטרולר מתבצעות בתוכו.. לא זכור לי עבודה עם הקונטרולר מחוצה לו.

avatar ענה intval ב 03 לספטמבר 2012 #

צודק, גם אני לא זוכר הרבה פעולות שנעשות על קונטרולרים מחוץ להם, למעט מקרים שווידג'ט מסוים, כמו צ'אט בעמוד,
רוצה לשנות את הטייטל של העמוד כשמגיעה הודעה חדשה.

avatar ענה KingYes ב 03 לספטמבר 2012 #

זה לא צד לקוח מאשר צד שרת הצ'אט הזה?

avatar ענה intval ב 03 לספטמבר 2012 #

הצ'אט הזה ספציפית באתר - כן, אבל ווידג'טים באופן כללי, לאו דווקא.
האמת שלצ'אט הזה בכלל אין שום קשר ל YII.